/*
 * @Description: 
 * @Date: 2022-07-05 16:31:51
 * @LastEditTime: 2022-07-05 16:34:02
 * @FilePath: /测试文档(总结)/42.js
 * @Author: byhzdemacbook-pro-2.local
 */

const isValid = (s) => {
  // 空字符串符合条件
  if (!s) {
    return true
  }

  const leftToRight = {
    '(': ')',
    '[': ']',
    '{': '}'
  }
  const stack = []

  for (let i = 0, len = s.length; i < len; i++) {
    const ch = s[i]
    // 左括号
    if (leftToRight[ch]) {
      stack.push(ch)
    } else {
      // 右括号开始匹配
      // 1. 如果栈内没有左括号，直接false
      // 2. 有数据但是栈顶元素不是当前的右括号
      if (!stack.length || leftToRight[stack.pop()] !== ch) {
        return false
      }
    }
  }

  // 最后检查栈内还有没有元素，有说明还有未匹配则不符合
  return !stack.length
}
isValid(['(', ')', '{', '}', '[', ']'])
